package com.hospital.register.core.mapper;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hospital.register.dto.core.admin.HospitalSetQueryDto;
import com.hospital.register.model.core.HospitalSet;
import com.hospital.register.vo.core.admin.HospitalSetPageVo;
import com.hospital.register.vo.core.api.HospitalSignVo;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 访问医院设置
 *
 * @author 刘逸晖
 */
public interface HospitalSetMapper {

    /**
     * 查询所有医院设置
     *
     * @return 医院设置列表
     */
    List<HospitalSet> selectAll();

    /**
     * 根据 id 删除医院设置
     *
     * @param id         id
     * @param updateTime 当前时间
     * @return 删除的条目数
     */
    int deleteById(@Param("id") Long id, @Param("updateTime") Date updateTime);

    /**
     * 分页查询医院设置
     *
     * @param page       分页条件
     * @param conditions 查询条件
     * @return 医院设置列表
     */
    Page<HospitalSetPageVo> selectPage(Page<HospitalSetPageVo> page, @Param("conditions") HospitalSetQueryDto conditions);

    /**
     * 新增医院设置
     *
     * @param hospitalSet 新增数据
     * @return 新增的条目数
     */
    int insert(HospitalSet hospitalSet);

    /**
     * 根据 id 查询医院设置
     *
     * @param id id
     * @return 医院设置
     */
    HospitalSet selectById(@Param("id") Long id);

    /**
     * 根据 id 更新医院设置
     * 创建时间、删除标志不可更新
     *
     * @param hospitalSet id 极其新数据
     * @return 更新的记录数
     */
    int updateById(HospitalSet hospitalSet);

    /**
     * 根据 id 列表批量删除医院设置
     *
     * @param idList     id 列表
     * @param updateTime 删除时间
     * @return 删除的记录数
     */
    int deleteByIdList(@Param("idList") List<Long> idList, @Param("updateTime") Date updateTime);

    /**
     * 根据 id 更新医院设置的状态
     *
     * @param id         id
     * @param status     状态
     * @param updateTime 更新时间
     * @return 更新的记录数
     */
    int updateStatusById(@Param("id") Long id, @Param("status") Byte status, @Param("updateTime") Date updateTime);

    /**
     * 根据医院编号查询签名秘钥
     *
     * @param hoscode 医院编号
     * @return 签名秘钥
     */
    String selectSignKeyByCode(@Param("hoscode") String hoscode);

    /**
     * 根据医院编号查询签名信息
     * @param hoscode 医院编号
     * @return 签名和 url ……
     */
    HospitalSignVo selectSignByCode(String hoscode);

}
